home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 551-575 / disk_570 / gadtoolsbox / source / source.lha / Scroller.c < prev    next >
C/C++ Source or Header  |  1991-11-04  |  24KB  |  682 lines

  1. /*-- AutoRev header do NOT edit!
  2. *
  3. *   Program         :   Scroller.c
  4. *   Copyright       :   © Copyright 1991 Jaba Development
  5. *   Author          :   Jan van den Baard
  6. *   Creation Date   :   07-Oct-91
  7. *   Current version :   1.00
  8. *   Translator      :   DICE v2.6
  9. *
  10. *   REVISION HISTORY
  11. *
  12. *   Date          Version         Comment
  13. *   ---------     -------         ------------------------------------------
  14. *   07-Oct-91     1.00            Scroller editor.
  15. *
  16. *-- REV_END --*/
  17.  
  18. #include "GTEd.h"
  19. #include "Protos.h"
  20.  
  21. /*
  22.  * --- External referenced data
  23.  */
  24. extern ULONG                Class;
  25. extern UWORD                Code;
  26. extern struct Gadget       *Object;
  27. extern APTR                 MainVisualInfo;
  28. extern struct TextAttr      Topaz80;
  29. extern struct Screen       *MainScreen;
  30. extern struct Window       *MainWindow;
  31. extern UWORD                ngFlags;
  32. extern WORD                 ngLeft, ngTop, ngWidth, ngHeight;
  33. extern UBYTE               *PlaceList[];
  34. extern UWORD                PlaceFlags[];
  35. extern struct ExtGadgetList Gadgets;
  36. extern struct MemoryChain  *Chain;
  37. extern BOOL                 Saved;
  38.  
  39. /*
  40.  * --- Gadget ID's
  41.  */
  42. #define GD_TEXT             0
  43. #define GD_LABEL            1
  44. #define GD_UNDERSCORE       2
  45. #define GD_DISABLED         3
  46. #define GD_HIGHLABEL        4
  47. #define GD_IMMEDIATE        5
  48. #define GD_RELVERIFY        6
  49. #define GD_LORIENT          7
  50. #define GD_TOP              8
  51. #define GD_TOTAL            9
  52. #define GD_VISIBLE          10
  53. #define GD_ARROWS           11
  54. #define GD_TEXTPLACE        12
  55. #define GD_OK               13
  56. #define GD_CANCEL           14
  57.  
  58. /*
  59.  * --- Module data
  60.  */
  61. struct Window              *sr_Wnd    = NULL;
  62. struct Gadget              *sr_GList  = NULL;
  63. struct Gadget              *sr_Gadgets[13];
  64. BOOL                        sr_Score = FALSE, sr_Disabled = FALSE;
  65. BOOL                        sr_Immediate = FALSE;
  66. BOOL                        sr_RelVerify = FALSE;
  67. UWORD                       sr_Lorient = LORIENT_HORIZ;
  68. WORD                        sr_Zoom[4];
  69. UBYTE                      *sr_Free[] = {
  70.     "Hori_zontal", "_Vertical  ", 0l };
  71.  
  72. struct TagItem              sr_nwTags[] = {
  73.     WA_Left,                0l,
  74.     WA_Top,                 0l,
  75.     WA_Width,               0l,
  76.     WA_Height,              0l,
  77.     WA_IDCMP,               IDCMP_CLOSEWINDOW | CYCLEIDCMP | BUTTONIDCMP | CHECKBOXIDCMP | MXIDCMP | IDCMP_REFRESHWINDOW | IDCMP_VANILLAKEY,
  78.     WA_Flags,               WFLG_DRAGBAR | WFLG_DEPTHGADGET | WFLG_CLOSEGADGET | WFLG_SMART_REFRESH | WFLG_ACTIVATE | WFLG_RMBTRAP,
  79.     WA_Gadgets,             0l,
  80.     WA_Title,               "Edit SCROLLER gadget:",
  81.     WA_AutoAdjust,          TRUE,
  82.     WA_Zoom,                (Tag)sr_Zoom,
  83.     WA_CustomScreen,        0l,
  84.     TAG_DONE };
  85.  
  86. /*
  87.  * --- Create the scroller gadget.
  88.  */
  89. long MakeScroller( void )
  90. {
  91.     struct ExtNewGadget *eng  = 0l;
  92.     struct TagItem      *tags = 0l;
  93.  
  94.     if ( eng = AllocItem( Chain, (long)sizeof( struct ExtNewGadget ), MEMF_PUBLIC )) {
  95.         if ( tags = MakeTagList( 9l )) {
  96.  
  97.             eng->en_NumTags = 9l;
  98.             eng->en_Tags = tags;
  99.  
  100.             ChangeScroller( eng );
  101.  
  102.             RemoveAllGadgets();
  103.  
  104.             AddTail(( struct List * )&Gadgets, ( struct Node * )eng );
  105.  
  106.             Renumber();
  107.  
  108.             if ( RemakeAllGadgets())
  109.                 return TRUE;
  110.  
  111.             Remove(( struct Node * )eng);
  112.         }
  113.     }
  114.  
  115.     MyRequest( "Ahem....", "CONTINUE", "Out of memory !" );
  116.  
  117.     if ( tags )         FreeTagList( tags, 9l );
  118.     if ( eng  )         FreeItem( Chain, eng, (long)sizeof( struct ExtNewGadget ));
  119.  
  120.     return FALSE;
  121. }
  122.  
  123. /*
  124.  * --- Change the scroller gadget.
  125.  */
  126. void ChangeScroller( struct ExtNewGadget *eng )
  127. {
  128.     struct TagItem      *tags;
  129.     UBYTE               *slab, *text, tn = 0;
  130.     long                 num;
  131.  
  132.     tags = eng->en_Tags;
  133.  
  134.     slab = (( struct StringInfo * )sr_Gadgets[ GD_LABEL ]->SpecialInfo )->Buffer;
  135.     text = (( struct StringInfo * )sr_Gadgets[ GD_TEXT  ]->SpecialInfo )->Buffer;
  136.  
  137.     eng->en_NewGadget.ng_LeftEdge   =   ngLeft;
  138.     eng->en_NewGadget.ng_TopEdge    =   ngTop;
  139.     eng->en_NewGadget.ng_Width      =   ngWidth;
  140.     eng->en_NewGadget.ng_Height     =   ngHeight;
  141.  
  142.     if ( strncmp( slab, "Gadget", 6 ) && strlen( slab )) {
  143.         strcpy( &eng->en_SourceLabel[0], slab );
  144.         eng->en_SpecialFlags |= EGF_USERLABEL;
  145.     } else
  146.         eng->en_SpecialFlags = 0l;
  147.  
  148.     if ( strlen( text )) {
  149.         strcpy( &eng->en_GadgetText[0], text );
  150.         eng->en_NewGadget.ng_GadgetText = &eng->en_GadgetText[0];
  151.         eng->en_NewGadget.ng_Flags      = ngFlags;
  152.     } else {
  153.         eng->en_NewGadget.ng_GadgetText = 0l;
  154.         eng->en_NewGadget.ng_Flags      = 0;
  155.     }
  156.  
  157.     eng->en_Kind    = SCROLLER_KIND;
  158.  
  159.     if ( sr_Score && strlen( text )) {
  160.         tags[ tn   ].ti_Tag  = GT_Underscore;
  161.         tags[ tn++ ].ti_Data = (Tag)'_';
  162.     }
  163.  
  164.     if ( sr_Disabled )
  165.         eng->en_SpecialFlags |= EGF_DISABLED;
  166.  
  167.     if ( NOT sr_RelVerify )
  168.         eng->en_SpecialFlags |= EGF_NOGADGETUP;
  169.  
  170.     tags[ tn   ].ti_Tag  = GA_RelVerify;
  171.     tags[ tn++ ].ti_Data = TRUE;
  172.  
  173.     if ( sr_Immediate ) {
  174.         tags[ tn   ].ti_Tag  = GA_Immediate;
  175.         tags[ tn++ ].ti_Data = TRUE;
  176.     }
  177.  
  178.     if ( sr_Lorient == LORIENT_VERT ) {
  179.         tags[ tn   ].ti_Tag  = PGA_Freedom;
  180.         tags[ tn++ ].ti_Data = sr_Lorient;
  181.     }
  182.  
  183.     num = (( struct StringInfo * )sr_Gadgets[ GD_TOP ]->SpecialInfo )->LongInt;
  184.  
  185.     if ( num ) {
  186.         tags[ tn   ].ti_Tag  = GTSC_Top;
  187.         tags[ tn++ ].ti_Data = num;
  188.     }
  189.  
  190.     num = (( struct StringInfo * )sr_Gadgets[ GD_TOTAL ]->SpecialInfo )->LongInt;
  191.  
  192.     if ( num ) {
  193.         tags[ tn   ].ti_Tag  = GTSC_Total;
  194.         tags[ tn++ ].ti_Data = num;
  195.     }
  196.  
  197.     num = (( struct StringInfo * )sr_Gadgets[ GD_VISIBLE ]->SpecialInfo )->LongInt;
  198.  
  199.     if ( num != 2 ) {
  200.         tags[ tn   ].ti_Tag  = GTSC_Visible;
  201.         tags[ tn++ ].ti_Data = num;
  202.     }
  203.  
  204.     num = (( struct StringInfo * )sr_Gadgets[ GD_ARROWS ]->SpecialInfo )->LongInt;
  205.  
  206.     if ( num > 7 ) {
  207.         eng->en_ArrowSize = num;
  208.         tags[ tn   ].ti_Tag  = GTSC_Arrows;
  209.         tags[ tn++ ].ti_Data = num;
  210.     }
  211.  
  212.     tags[ tn ].ti_Tag = TAG_DONE;
  213.  
  214.     Saved = FALSE;
  215. }
  216.  
  217. /*
  218.  * --- Open the EditScroller requester.
  219.  */
  220. long EditScroller( WORD x, WORD y, WORD x1, WORD y1, struct Gadget *edit )
  221. {
  222.     struct Gadget       *g;
  223.     struct ExtNewGadget *e;
  224.     struct NewGadget     ng;
  225.     BOOL                 running = TRUE, ok = FALSE, high = FALSE;
  226.     WORD                 l, t, w, h, btop, bleft, gw, gh;
  227.     UBYTE               *label = 0l, *slabel = 0l, gbuf[10], *cycle;
  228.     Tag                  place = 0l, num;
  229.     UWORD                flag  = PLACETEXT_LEFT, ID;
  230.     UWORD                top = 0, total = 0, visible = 2, arrows = 8;
  231.  
  232.     cycle = &PlaceList[1];
  233.  
  234.     if ( edit ) {
  235.         e = FindExtGad( edit );
  236.  
  237.         x  = e->en_NewGadget.ng_LeftEdge;
  238.         y  = e->en_NewGadget.ng_TopEdge;
  239.         gw = e->en_NewGadget.ng_Width;
  240.         gh = e->en_NewGadget.ng_Height;
  241.  
  242.         label  = &e->en_GadgetText[0];
  243.         slabel = &e->en_SourceLabel[0];
  244.  
  245.         flag = e->en_NewGadget.ng_Flags;
  246.  
  247.         if ( flag & PLACETEXT_LEFT  ) place = 0l;
  248.         if ( flag & PLACETEXT_RIGHT ) place = 1l;
  249.         if ( flag & PLACETEXT_ABOVE ) place = 2l;
  250.         if ( flag & PLACETEXT_BELOW ) place = 3l;
  251.  
  252.         if ( flag & NG_HIGHLABEL    ) high = TRUE;
  253.  
  254.         sr_Score     = MyTagInArray( GT_Underscore, e->en_Tags );
  255.         sr_Immediate = MyTagInArray( GA_Immediate,  e->en_Tags );
  256.         sr_RelVerify = MyTagInArray( GA_RelVerify,  e->en_Tags );
  257.  
  258.         if (( e->en_SpecialFlags & EGF_NOGADGETUP ) == EGF_NOGADGETUP )
  259.             sr_RelVerify = FALSE;
  260.  
  261.         if ( MyTagInArray( PGA_Freedom, e->en_Tags ))
  262.             sr_Lorient = LORIENT_VERT;
  263.         else
  264.             sr_Lorient = LORIENT_HORIZ;
  265.  
  266.         top     = GetTagData( GTSC_Top,     0, e->en_Tags );
  267.         total   = GetTagData( GTSC_Total,   0, e->en_Tags );
  268.         visible = GetTagData( GTSC_Visible, 2, e->en_Tags );
  269.         arrows  = GetTagData( GTSC_Arrows,  8, e->en_Tags );
  270.  
  271.         if (( e->en_SpecialFlags & EGF_DISABLED ) == EGF_DISABLED )
  272.             sr_Disabled = TRUE;
  273.         else
  274.             sr_Disabled = FALSE;
  275.  
  276.     } else {
  277.         if ( x > x1 ) { gw = x; x = x1; x1 = gw; }
  278.         if ( y > y1 ) { gh = y; y = y1; y1 = gh; }
  279.  
  280.         gw = x1 - x + 1;
  281.         gh = y1 - y + 1;
  282.     }
  283.  
  284.     btop  = MainScreen->WBorTop + 1 + MainScreen->RastPort.TxHeight;
  285.     bleft = MainScreen->WBorLeft;
  286.  
  287.     w = bleft + MainScreen->WBorRight  + 300;
  288.     h = btop  + MainScreen->WBorBottom + 182;
  289.     l = (( MainScreen->Width  >> 1 ) - ( w >> 1 ));
  290.     t = (( MainScreen->Height >> 1 ) - ( h >> 1 ));
  291.  
  292.     sr_Zoom[0] = 0;
  293.     sr_Zoom[1] = btop;
  294.     sr_Zoom[2] = 200;
  295.     sr_Zoom[3] = btop;
  296.  
  297.     sr_nwTags[0 ].ti_Data = l;
  298.     sr_nwTags[1 ].ti_Data = t;
  299.     sr_nwTags[2 ].ti_Data = w;
  300.     sr_nwTags[3 ].ti_Data = h;
  301.     sr_nwTags[10].ti_Data = (Tag)MainScreen;
  302.  
  303.     if ( g = CreateContext( &sr_GList ))  {
  304.  
  305.         ng.ng_LeftEdge      =   bleft + 56;
  306.         ng.ng_TopEdge       =   btop + 4;
  307.         ng.ng_Width         =   236;
  308.         ng.ng_Height        =   12;
  309.         ng.ng_GadgetText    =   "_Text ";
  310.         ng.ng_TextAttr      =   &Topaz80;
  311.         ng.ng_GadgetID      =   GD_TEXT;
  312.         ng.ng_Flags         =   PLACETEXT_LEFT;
  313.         ng.ng_VisualInfo    =   MainVisualInfo;
  314.         ng.ng_UserData      =   0l;
  315.  
  316.         g = CreateGadget( STRING_KIND, g, &ng, GTST_String, (Tag)label, GTST_MaxChars, (Tag)GT_MAXLABELNAME + 1, GT_Underscore, (Tag)'_', TAG_DONE );
  317.  
  318.         SetStringGadget( g );
  319.  
  320.         sr_Gadgets[ GD_TEXT ] = g;
  321.  
  322.         ng.ng_TopEdge       =   btop + 20;
  323.         ng.ng_GadgetText    =   "_Label";
  324.         ng.ng_GadgetID      =   GD_LABEL;
  325.  
  326.         g = CreateGadget( STRING_KIND, g, &ng, GTST_String, (Tag)slabel, GTST_MaxChars, (Tag)GT_MAXLABEL + 1, GT_Underscore, (Tag)'_', TAG_DONE );
  327.  
  328.         SetStringGadget( g );
  329.  
  330.         sr_Gadgets[ GD_LABEL ] = g;
  331.  
  332.         ng.ng_LeftEdge      =   bleft + 96;
  333.         ng.ng_TopEdge       =   btop + 36;
  334.         ng.ng_GadgetText    =   "_Underscore";
  335.         ng.ng_GadgetID      =   GD_UNDERSCORE;
  336.  
  337.         g = CreateGadget( CHECKBOX_KIND, g, &ng, GTCB_Checked, (Tag)sr_Score, GT_Underscore, (Tag)'_', TAG_DONE );
  338.  
  339.         sr_Gadgets[ GD_UNDERSCORE ] = g;
  340.  
  341.         ng.ng_LeftEdge      =   bleft + 266;
  342.         ng.ng_GadgetText    =   "_Disabled  ";
  343.         ng.ng_GadgetID      =   GD_DISABLED;
  344.  
  345.         g = CreateGadget( CHECKBOX_KIND, g, &ng, GTCB_Checked, (Tag)sr_Disabled, GT_Underscore, (Tag)'_', TAG_DONE );
  346.  
  347.         sr_Gadgets[ GD_DISABLED ] = g;
  348.  
  349.         ng.ng_LeftEdge      =   bleft + 96;
  350.         ng.ng_TopEdge       =   btop + 51;
  351.         ng.ng_GadgetText    =   "_High Label";
  352.         ng.ng_GadgetID      =   GD_HIGHLABEL;
  353.  
  354.         g = CreateGadget( CHECKBOX_KIND, g, &ng, GTCB_Checked, (Tag)high, GT_Underscore, '_', TAG_DONE );
  355.  
  356.         sr_Gadgets[ GD_HIGHLABEL ] = g;
  357.  
  358.         ng.ng_LeftEdge      =   bleft + 266;
  359.         ng.ng_GadgetText    =   "_Immediate ";
  360.         ng.ng_GadgetID      =   GD_IMMEDIATE;
  361.  
  362.         g = CreateGadget( CHECKBOX_KIND, g, &ng, GTCB_Checked, (Tag)sr_Immediate, GT_Underscore, '_', TAG_DONE );
  363.  
  364.         sr_Gadgets[ GD_IMMEDIATE ] = g;
  365.  
  366.         ng.ng_LeftEdge      =   bleft + 96;
  367.         ng.ng_TopEdge       =   btop +  66;
  368.         ng.ng_GadgetText    =   "_Relverify ";
  369.         ng.ng_GadgetID      =   GD_RELVERIFY;
  370.  
  371.         g = CreateGadget( CHECKBOX_KIND, g, &ng, GTCB_Checked, (Tag)sr_RelVerify, GT_Underscore, '_', TAG_DONE );
  372.  
  373.         sr_Gadgets[ GD_RELVERIFY ] = g;
  374.  
  375.         ng.ng_TopEdge       =   btop + 64;
  376.         ng.ng_LeftEdge      =   bleft + 266;
  377.         ng.ng_GadgetText    =   0l;
  378.         ng.ng_GadgetID      =   GD_LORIENT;
  379.  
  380.         g = CreateGadget( MX_KIND, g, &ng, GTMX_Labels, sr_Free, GTMX_Active, (Tag)sr_Lorient - 1, GT_Underscore, '_', TAG_DONE );
  381.  
  382.         sr_Gadgets[ GD_LORIENT ] = g;
  383.  
  384.         ng.ng_LeftEdge      =   bleft + 96;
  385.         ng.ng_TopEdge       =   btop + 84;
  386.         ng.ng_Width         =   196;
  387.         ng.ng_Height        =   12;
  388.         ng.ng_GadgetText    =   "To_p       ";
  389.         ng.ng_GadgetID      =   GD_TOP;
  390.  
  391.         g = CreateGadget( INTEGER_KIND, g, &ng, GTIN_Number, top, GTIN_MaxChars, 5l, GT_Underscore, '_', TAG_DONE );
  392.  
  393.         SetStringGadget( g );
  394.  
  395.         sr_Gadgets[ GD_TOP ] = g;
  396.  
  397.         ng.ng_TopEdge       =   btop + 100;
  398.         ng.ng_GadgetText    =   "Tot_al     ";
  399.         ng.ng_GadgetID      =   GD_TOTAL;
  400.  
  401.         g = CreateGadget( INTEGER_KIND, g, &ng, GTIN_Number, total, GTIN_MaxChars, 5l, GT_Underscore, '_', TAG_DONE );
  402.  
  403.         SetStringGadget( g );
  404.  
  405.         sr_Gadgets[ GD_TOTAL ] = g;
  406.  
  407.         ng.ng_TopEdge       =   btop + 116;
  408.         ng.ng_GadgetText    =   "Vi_sible   ";
  409.         ng.ng_GadgetID      =   GD_VISIBLE;
  410.  
  411.         g = CreateGadget( INTEGER_KIND, g, &ng, GTIN_Number, visible, GTIN_MaxChars, 5l, GT_Underscore, '_', TAG_DONE );
  412.  
  413.         SetStringGadget( g );
  414.  
  415.         sr_Gadgets[ GD_VISIBLE ] = g;
  416.  
  417.         ng.ng_TopEdge       =   btop + 132;
  418.         ng.ng_GadgetText    =   "Arro_ws    ";
  419.         ng.ng_GadgetID      =   GD_ARROWS;
  420.  
  421.         g = CreateGadget( INTEGER_KIND, g, &ng, GTIN_Number, arrows, GTIN_MaxChars, 5l, GT_Underscore, '_', TAG_DONE );
  422.  
  423.         SetStringGadget( g );
  424.  
  425.         sr_Gadgets[ GD_ARROWS ] = g;
  426.  
  427.         ng.ng_TopEdge       =   btop + 148;
  428.         ng.ng_Height        =   13;
  429.         ng.ng_GadgetText    =   "T_ext Place";
  430.         ng.ng_GadgetID      =   GD_TEXTPLACE;
  431.  
  432.         g = CreateGadget( CYCLE_KIND, g, &ng, GTCY_Labels, (Tag)cycle, GTCY_Active, place, GT_Underscore, (Tag)'_', TAG_DONE );
  433.  
  434.         sr_Gadgets[ GD_TEXTPLACE ] = g;
  435.  
  436.         ng.ng_LeftEdge      =   bleft + 8;
  437.         ng.ng_TopEdge       =   btop + 165;
  438.         ng.ng_Width         =   90;
  439.         ng.ng_GadgetText    =   "_OK";
  440.         ng.ng_Flags         =   PLACETEXT_IN;
  441.         ng.ng_GadgetID      =   GD_OK;
  442.  
  443.         g = CreateGadget( BUTTON_KIND, g, &ng, GT_Underscore, (Tag)'_', TAG_DONE );
  444.  
  445.         ng.ng_LeftEdge      =   bleft + 202;
  446.         ng.ng_GadgetText    =   "_CANCEL";
  447.         ng.ng_GadgetID      =   GD_CANCEL;
  448.  
  449.         g = CreateGadget( BUTTON_KIND, g, &ng, GT_Underscore, (Tag)'_', TAG_DONE );
  450.  
  451.         if ( g ) {
  452.  
  453.             sr_nwTags[6].ti_Data = (Tag)sr_GList;
  454.  
  455.             if ( sr_Wnd = OpenWindowTagList( 0l, sr_nwTags )) {
  456.  
  457.                 sr_Zoom[0] = l;
  458.                 sr_Zoom[1] = t;
  459.                 sr_Zoom[2] = w;
  460.                 sr_Zoom[3] = h;
  461.  
  462.                 GT_RefreshWindow( sr_Wnd, 0l );
  463.  
  464.                 do {
  465.                     WaitPort( sr_Wnd->UserPort );
  466.  
  467.                     while ( ReadIMsg( sr_Wnd )) {
  468.  
  469.                         switch ( Class ) {
  470.  
  471.                             case    IDCMP_REFRESHWINDOW:
  472.                                 GT_BeginRefresh( sr_Wnd );
  473.                                 GT_EndRefresh( sr_Wnd, TRUE );
  474.                                 break;
  475.  
  476.                             case    IDCMP_CLOSEWINDOW:
  477.                                 running = FALSE;
  478.                                 break;
  479.  
  480.                             case    IDCMP_GADGETDOWN:
  481.                                 switch( Object->GadgetID ) {
  482.  
  483.                                     case    GD_LORIENT:
  484.                                         if ( NOT Code ) sr_Lorient = LORIENT_HORIZ;
  485.                                         else            sr_Lorient = LORIENT_VERT;
  486.                                         break;
  487.                                 }
  488.                                 break;
  489.  
  490.                             case    IDCMP_GADGETUP:
  491.                                 switch( Object->GadgetID ) {
  492.  
  493.                                     case    GD_UNDERSCORE:
  494.                                         FlipFlop( 0l, 0l, 0l, &sr_Score );
  495.                                         break;
  496.  
  497.                                     case    GD_DISABLED:
  498.                                         FlipFlop( 0l, 0l, 0l, &sr_Disabled );
  499.                                         break;
  500.  
  501.                                     case    GD_HIGHLABEL:
  502.                                         FlipFlop( 0l, 0l, 0l, &high );
  503.                                         break;
  504.  
  505.                                     case    GD_IMMEDIATE:
  506.                                         FlipFlop( 0l, 0l, 0l, &sr_Immediate );
  507.                                         break;
  508.  
  509.                                     case    GD_RELVERIFY:
  510.                                         FlipFlop( 0l, 0l, 0l, &sr_RelVerify );
  511.                                         break;
  512.  
  513.                                     case    GD_TOP:
  514.  
  515.                                         num = (( struct StringInfo * )sr_Gadgets[ GD_TOP ]->SpecialInfo )->LongInt;
  516.  
  517.                                         if ( num < 0 ) {
  518.                                             DisplayBeep( MainScreen );
  519.                                             GT_SetGadgetAttrs( sr_Gadgets[ GD_TOP ], sr_Wnd, 0l, GTIN_Number, 0l, TAG_DONE );
  520.                                         }
  521.                                         break;
  522.  
  523.                                     case    GD_TOTAL:
  524.  
  525.                                         num = (( struct StringInfo * )sr_Gadgets[ GD_TOTAL ]->SpecialInfo )->LongInt;
  526.  
  527.                                         if ( num < 0 ) {
  528.                                             DisplayBeep( MainScreen );
  529.                                             GT_SetGadgetAttrs( sr_Gadgets[ GD_TOTAL ], sr_Wnd, 0l, GTIN_Number, 0l, TAG_DONE );
  530.                                         }
  531.                                         break;
  532.  
  533.                                     case    GD_VISIBLE:
  534.  
  535.                                         num = (( struct StringInfo * )sr_Gadgets[ GD_VISIBLE ]->SpecialInfo )->LongInt;
  536.  
  537.                                         if ( num < 0 ) {
  538.                                             DisplayBeep( MainScreen );
  539.                                             GT_SetGadgetAttrs( sr_Gadgets[ GD_VISIBLE ], sr_Wnd, 0l, GTIN_Number, 0l, TAG_DONE );
  540.                                         }
  541.                                         break;
  542.  
  543.                                     case    GD_ARROWS:
  544.  
  545.                                         num = (( struct StringInfo * )sr_Gadgets[ GD_TOP ]->SpecialInfo )->LongInt;
  546.  
  547.                                         if ( num < 0 ) {
  548.                                             DisplayBeep( MainScreen );
  549.                                             GT_SetGadgetAttrs( sr_Gadgets[ GD_ARROWS ], sr_Wnd, 0l, GTIN_Number, 0l, TAG_DONE );
  550.                                         }
  551.                                         break;
  552.  
  553.                                     case    GD_TEXTPLACE:
  554.                                         if ( place++ == 3 )
  555.                                             place = 0;
  556.  
  557.                                         flag = PlaceFlags[ place + 1 ];
  558.                                         break;
  559.  
  560.                                     case    GD_OK:
  561.                                         Ok:
  562.                                         ok = TRUE;
  563.  
  564.                                     case    GD_CANCEL:
  565.                                         Cancel:
  566.                                         running = FALSE;
  567.                                         break;
  568.                                 }
  569.                                 break;
  570.  
  571.                             case    IDCMP_VANILLAKEY:
  572.                                 switch( Code ) {
  573.  
  574.                                     case    't':
  575.                                         ID = GD_TEXT;
  576.                                         goto Activate;
  577.  
  578.                                     case    'l':
  579.                                         ID = GD_LABEL;
  580.                                         goto Activate;
  581.  
  582.                                     case    'u':
  583.                                         FlipFlop( sr_Wnd, sr_Gadgets, GD_UNDERSCORE, &sr_Score );
  584.                                         break;
  585.  
  586.                                     case    'd':
  587.                                         FlipFlop( sr_Wnd, sr_Gadgets, GD_DISABLED, &sr_Disabled );
  588.                                         break;
  589.  
  590.                                     case    'h':
  591.                                         FlipFlop( sr_Wnd, sr_Gadgets, GD_HIGHLABEL, &high );
  592.                                         break;
  593.  
  594.                                     case    'i':
  595.                                         FlipFlop( sr_Wnd, sr_Gadgets, GD_IMMEDIATE, &sr_Immediate );
  596.                                         break;
  597.  
  598.                                     case    'r':
  599.                                         FlipFlop( sr_Wnd, sr_Gadgets, GD_RELVERIFY, &sr_RelVerify );
  600.                                         break;
  601.  
  602.                                     case    'z':
  603.                                         sr_Lorient = LORIENT_HORIZ;
  604.                                         GT_SetGadgetAttrs( sr_Gadgets[ GD_LORIENT ], sr_Wnd, 0l, GTMX_Active, 0l, TAG_DONE );
  605.                                         break;
  606.  
  607.                                     case    'v':
  608.                                         sr_Lorient = LORIENT_VERT;
  609.                                         GT_SetGadgetAttrs( sr_Gadgets[ GD_LORIENT ], sr_Wnd, 0l, GTMX_Active, 1l, TAG_DONE );
  610.                                         break;
  611.  
  612.                                     case    'p':
  613.                                         ID = GD_TOP;
  614.                                         goto Activate;
  615.  
  616.                                     case    'a':
  617.                                         ID = GD_TOTAL;
  618.                                         goto Activate;
  619.  
  620.                                     case    's':
  621.                                         ID = GD_VISIBLE;
  622.                                         goto Activate;
  623.  
  624.                                     case    'w':
  625.                                         ID = GD_ARROWS;
  626.                                         goto Activate;
  627.  
  628.                                     case    'e':
  629.                                         if ( place++ == 3 )
  630.                                             place = 0;
  631.  
  632.                                         flag = PlaceFlags[ place + 1 ];
  633.                                         GT_SetGadgetAttrs( sr_Gadgets[ GD_TEXTPLACE ], sr_Wnd, 0l, GTCY_Active, place, TAG_DONE );
  634.                                         break;
  635.  
  636.                                     case    'o':
  637.                                         goto Ok;
  638.  
  639.                                     case    'c':
  640.                                         goto Cancel;
  641.                                 }
  642.                                 break;
  643.                                 Activate:
  644.                                 ActivateGadget( sr_Gadgets[ ID ], sr_Wnd, 0l );
  645.                                 break;
  646.                         }
  647.                     }
  648.                 } while ( running );
  649.             }
  650.         }
  651.     }
  652.  
  653.     if ( ok) {
  654.         if ( high ) flag |= NG_HIGHLABEL;
  655.  
  656.         ngFlags     =   flag;
  657.         ngLeft      =   x;
  658.         ngTop       =   y;
  659.         ngWidth     =   gw;
  660.         ngHeight    =   gh;
  661.         if ( NOT edit )
  662.             ok = MakeScroller();
  663.         else {
  664.             RemoveAllGadgets();
  665.             ChangeScroller( e );
  666.             Renumber();
  667.             ok = RemakeAllGadgets();
  668.         }
  669.     } else if ( NOT edit )
  670.         Box( x, y, x1, y1 );
  671.  
  672.     if ( sr_Wnd )           CloseWindow( sr_Wnd );
  673.     if ( sr_GList )         FreeGadgets( sr_GList );
  674.  
  675.     sr_Wnd     = 0l;
  676.     sr_GList   =  0l;
  677.  
  678.     ClearMsgPort( MainWindow->UserPort );
  679.  
  680.     return( ok );
  681. }
  682.